Puma,
ну примерно в этом направлении, да.
Только товары не обязательно складывать все в самую общую родительскую группу.
Можно сделать, например, так:
Постельное белье (без товаров в самой группе):
— двуспальное (с товарами)
— односпальное (с товарами)
— семейное (с товарами)
— сатин (без товаров, по фильтру выводятся все товары из группы "постельное белье" имеющие в доп.свойстве "материал" значение "сатин"

— шелк (без товаров, по фильтру выводятся все товары из группы "постельное белье" имеющие в доп.свойстве "материал" значение "шелк"

— бязь (без товаров, по фильтру выводятся все товары из группы "постельное белье" имеющие в доп.свойстве "материал" значение "шелк"

— однотонное (без товаров, по фильтру выводятся все товары из группы "постельное белье" имеющие в доп.свойстве "цвет" значение "однотонное"

— цветное (без товаров, по фильтру выводятся все товары из группы "постельное белье" имеющие в доп.свойстве "цвет" значение "цветное"

— детское (с товарами)
Фильтр можно передавать явно, в виде get-параметров в url пустых групп, записав нужное get-выражение в доп.свойство группы, но это будет не красиво.
Лучше cделать у группы доп.свойства, хранящие id доп.свойства товара, по которому должна происходить фильтрация, и нужное значение этого доп.свойства товара, и реализовывать фильтр неявно, просто в коде ТДС, в зависимости от значения доп.свойств группы.
Доп.свойства товаров лучше делать списками, удобнее будет. Галочками непрактично.
Насчет товаров или модификаций - надо думать, в зависимости от тех.задания, возможно будет нужно и то и другое, а возможно получится обойтись одними товарами, без модификаций.