JSON columns, like columns of other binary types, are not indexed directly; instead, you can create an index on a generated column that extracts a scalar value from the JSON column.
Ну он копирует в генерируемую колонку данные, и по ней делает индекс. Избыточность по данным, но цель достигнута. Вряд ли тебе надо на все поля json делать индекс. Поэтому в целом нормально
У меня грубо говоря много счётчиков. В силу специфики, это должно быть решение именно на mysql (транзакции, шардинг с другими данными и тд) и уметь жить под большой нагрузкой.
Думаем между длинной таблицей и json. Сейчас широкая таблица, но подходим у лимиту мускуля по количеству столбцов. И там есть причины почему так было сделано.