Как понять, что пользователь забыл переключить язык (ошибся раскладкой)?
Для поиска использую сфинкс, тупо если в другой раскладке, что то найдено, а в текущей нет, то выдаю результаты для другой раскладки.
До миллиона записей сфинкс выдает результаты быстрее чем 1 милисекунда.
Самый простой способ — в случае отсутствия результатов поиска, делать повторную выборку прогнав вводимую строку через функцию ассоциаций раскладки типа str_replace(['q', 'w', 'e', ....], ['й', 'ц', у'', ...], $queryString)
Хотя анализ сочетаний правильнее, так что лучше комбинировать.