В идеале, я думаю, у вас было бы два отдельных критерия поиска, один для описания (s1) и один для цвета (s2).
Тогда ваш запрос становится:
select * from tbl where description like '%(s1)%' and colour like '%(s2)%'
Подставляя в значения для s1 и s2, конечно.
Пустой s2 приведет к %%, который должен соответствовать всем (я думаю).
Чтобы выполнить поиск по нескольким терминам в любом поле, вам нужно что-то вроде
select * from tbl
where description + colour like '%(s1)%'
and description + colour like '%(s2)%'
and description + colour like '%(s3)%'
Это должно быть построено на лету, основываясь на количестве слов в вашем шаблоне поиска (таким образом, у «черного платья» будет s1 и s2, у черного будет просто s1). Бит "описание + цвет" - это объединенные поля; мой SQL немного заржавел, поэтому я не знаю, как бы вы это сделали, но концепция ясна.