Как хранить атрибуты «товара» в laravel, если есть общие и уникальные атрибуты?
Вообще, то что вы сделали называется EAV(Entity, Attribute, Value), красивее и быстрее можно делать используя json - https://coussej.github.io/2016/01/14/Replacing-EAV...
Из-за общих полей проблемы вряд ли возникнут, рано пока оптимизировать.
Для этого есть обычная реализация мета полей. 
Это таблица полей (пример)Schema::create('metas', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('key')->index();
            $table->text('value')->nullable();
            $table->uuid('post_id');
            $table->text('post_type');
            $table->timestamps();
        });
В модели выставляются полиморфные отношения: public function meta() {
        return $this->morphMany('App\Meta', 'post');
    }
Полиморфные сделаны для того чтобы поля можно было использовать для любых моделей.