Если массив маленький, то findIndex с коллбэком для поиска строк (и значений смешанных типов) использовать гораздо разумнее. Другой вариант, при возможности исключить один из символов из ввода - это поиск регуляркой по строковому словарю (простые рег. выражения в ряде случаев не только проще, но и быстрее перебора массива в интерпретируемом юзеркоде. Почему так - это отдельная обширная тема).
А если массив большой - то вместо него нужно использовать хэштаблицу (с нормализацией ввода), это без вариантов. Потому что тормоза на переборе элементов будут просто колоссальные, а у ХТ поиск ключа всегда стремится к O(1). Еще, очень хорошую производительность поиска по большим данным показывают деревья (иногда даже лучшую, чем у ХТ: при долгом доступе к данным, и при диапазонном/прогрессивном поиске).
Чем плох indexOf - да ничем, он всем хорош. Просто он для совершенно других целей предназначен (например, для поиска в массиве объектов).
// В целом, эта задача из категории "как потратить время впустую", потому что в реальности поиск реализуется совершенно иначе. Подобные задачи учат антипаттернам => очень вредны всем, кто хочет научиться программированию, и адекватному использованию JS.