Насколько схема корректная с точки зрения проектирования?
Непонятно, к чему здесь FeatureProps. Зачем тут многие ко многим?
ProductProps (product_id, feature_id, prop_id) достаточно
если я захочу заменить точечно на определённых товарах?
Скорее всего, это будет уже новое свойство.
Если захочется переименовать для отдельных товаров, то понадобится таблица feature_names(feature_id, product_id, name), которую лефт джойнить к запросу, и брать имя из неё, если есть.
Имена таблиц тоже лучше делать в нижнем регистре. Сбережёт некоторое количество нервных клеток.
На всякий случай предупрежу: Если продукт дойдёт до продакшена, то искать всё равно будете Эластиком. И как следствие - выкините весь EAV за ненадобностью, а все свойства сложите в JSON
Но для практики конечно поколупаться конечно полезно