Как проектируются БД для таких сайтов?
1) Четкие названия для каждого поля, на английском (это стандарт, не ленитесь заглянуть в гугл транслейт для перевода, и сами английский подтянете, и выглядит профессионально, за код не стыдно и тд)
2) В полях где можно сделать ограниченное количество вариантов ставится поле типа int и к этому полю связанная таблица справочник. Так по этим полям будет легче и быстрее делаться выборка в случае поиска по фильтру.
3) Varchar используется только там где пользователь вводит что-либо "от руки", в остальных случаях это практически всегда связь со справочной таблицей, в которой перечислены возможные значения.
Что касается еластиксерча, это механизм поиска в текстовых полях, мощный и удобный, но в данном случае избыточный, просто надо нормально спроектировать. Это все равно что сделать кривой медленный код и потом вешать кэширование чтобы хоть как то работало на приемлемой скорости. Типа, "лыжи по асфальту не едут, давайте лыжнику в ж... вставим ракету помощнее!".