Правильное решение: использовать решения вроде Elastic.
Однако для этого Elastic надо куда-то поставить, что не всегда допустимо.
Любые другие решения будут костылём различной степени кривости.
Вариант с написанием обвязки будет катастрофически медленным, и, более того, не нужным, потому что всё можно сделать средствами СУБД
Костыльное решение, работающее на голой СУБД:
- Для каждого ряда в БД используя самопальную версию поиска подстроки, допускающую ошибки, найти вхождения каждого поля в строку, по которой ведётся поиск.
- Построить оценку каждого ряда, основанную на сумме длин найденных подстрок и количестве ошибок (этот пункт требует экспериментов на реальных данных).
- Отсортировать результат по этой оценке