неточный поиск (например с опечатками) можно реализовать с помощью функции Левенштейна
php.net/manual/ru/function.levenshtein.php
но это будет работать примерно только в 80% случаев, смотря как настроить параметры. А чтобы сделать более умный поиск, наверно надо использовать нейронные сети
Если нет времени погружаться в это, то есть готовые решения (Algolia, Sphinx, Scout, Lucene) и тому подобные сервисы