Как строить архитектуру БД, где у юзеров много полей?
Все  по чему нет поиска, то выносится в json. 
Если же нужно искать по json например  поле парни из 7 бара, для этого создается новая таблица. 
И уже оттуда берется список для поиска по  Id из основной таблицы
В Mysql версий 5.6+ есть функция JSON_TABLE, при помощи которой можно получить "аккуратный список" из поля JSON.