Как организовать структуру базы данных для характеристик товаров магазина?
Доброго. Что ж тут думать, это ж не шахматы.  Вот у вас есть условно 1000 свойств товара.  У некого товара из них заполнено всего 3.  Остальные хранить пустыми, разумеется, не нужно. 
Что нужно - а очень даже просто, следите за рукою: 
Берем id товара, условно 1189.   Берем три id свойств товара, 11, 22, 33.  Заводим таблицу с полями: 
Id_ProductProperty int 
Id_Product int 
Id_Property int 
И вот сюда аккуратно кладем: 
1    1189   11
2    1189   22
3     1189  33
Всё.  Есть у вас свойство  - оно в этой таблице, а значит, True.  Нет свойства - нет его в этой таблице.  
Таблица полностью интовая, еще индексы ставите, как положено, на join поля  - и все летает.
Юзай типы данных, Люк. Есть ведь множество типов данных у мускуля. По факту нужна одна таблица, в которой перечислены значения характеристик товара. Максимум, можно создать доп. таблицы, описывающие набор хар-к каждой категории товаров, если варианты значений там сильно различаются.