У вас тормозит не поиск, а манипуляции с DOM
Во первых, заменить сравнение
> -1 на строгое неравенство.
Во вторых, не использовать манипулирование объектом style, вместо этого добавлять/удалять класс, при этом не нужно добавлять/удалять класс если он уже и так в нужном состоянии. То есть необходимо добавить проверку на наличие/отсутствие класса.
Ну и в третьих, в начале функции, которая вызывается на событие "keyup" я бы воткнул проверку на то, какая кнопка была нажата, существует ряд кнопок, реагировать на которые нет смысла, например, пунктуация и пробелы, уверен вы найдёте ещё парочку =)
<style>.hidden{display:none}</style>
<script>
allVariants.forEach(function (item) {
if (item.getAttribute('name').toLowerCase().indexOf(query) !== -1) {
if(item.classList.contains('hidden')){
item.classList.remove('hidden')
}
}
else {
if(item.classList.contains('hidden') === false){
item.classList.add('hidden')
}
}
})
</script>
Ну и как упомянули выше, наверное стоит отказаться от forEach, я сам лично не исследовал, но мне кажется создание контекста для вызова функции и её вызов будут медленнее, чем пройтись обычным фором