Сделать можно, но здесь вас ждёт множество граблей:
1. Крайне неэффективное хранение: объём в разы больше, чем если раскидать по таблицам.
2. Эффективность индексов по JSON полю: если в постгресе она не особо радует, но можно выбирать между простотой и скоростью работы, то в мускуле есть только убогие костыли с индексированием частей объекта через
генерируемые столбцы.
3. OR = JSON_OVERLAPS, IN = JSON_CONTAINS или разворачивать вручную. И чёрт знает, сработает ли индекс потому, что это функции, а не операторы.
4. Типизация значений: в JSON можно пихнуть и '3', и 3 и 3.0. Нужно внимательно следить за типами и при сохранении, и при поиске, чтобы всё правильно находилось.
В общем, если хотите навернуть такое, то стоит крепко задуматься о переходе на постгрес, в нём хотя бы 2 и 3 проблемы не будут выглядеть неразрешимыми.