Один из способов нахождения вариантов - для данного слова составить список всех возможных слов с расстоянием Левенштейна равным единице (или 2, но тогда таких слов будет уже много). А потом по словарю проверить, какие из слов существуют на самом деле. Допустим есть слово из 10 символов. Тогда можно заменить каждый из символов на любой другой, это 320 вариантов, плюс между двумя символами можно вставить любой символ, это еще 297 вариантов. Итого нужно проверить около 600 слов, это делается за время меньше секунды. Если разрешить слова с двумя ошибками, тогда вариантов будет уже гораздо больше и на ПХП будет слишком медленно.