Такое хранение характеристик широко известно под названием Entity Attribute Value. Я применяю этот подход, но для «не стандартных» полей. Хотя несколько модифицированный и заточенный именно под магазин. Но вынос всех характеристик по такому принципу еще большее зло чем сотни пустых товаров. Для обычного поиска по названию товара придется делать массу телодвижений (а для поиска по названию и фильтрации по цене, вообще без HAVING или вложенного запроса не обойтись). Тем более что дизайн добавления и редактирования товара тоже должен быть не набором полей для заполнения. А для этого мы должны пойти по одному из трех путей: забить и вывести просто списком, добавить для каждой характеристики поле отвечающее за вид инпута (но что делать если расположение этих инпутов тоже не должно быть стандартным), сделать эти поля статичными (оставить то что есть сейчас). Я считаю что если сломя голову гнаться за гибкостью системы (а EAV несомненно самый гибкий вариант) можно достичь такой сложности редактирования всего этого, что мы опять же придем к обычному созданию таблиц, только в своей реализации.