Скорость перебора массива зависит от реализации этого перебора в самом языке. Снижение скорости может быть обусловлено какими-то удобствами. К примеру, в Lua (скриптовой язык) перебор массива очень медленный, потому что там каждый массив - это хеш-таблица со всеми вытекающими. То есть это не просто поиск элемента по индексу в памяти относительно начала массива в памяти, это еще и хеширование каждого ключа, и поиск по хешу, а если есть метатаблица (аналог прототипа в JS), то еще дополнительные проверки на перегрузку доступа к элементу.
Возможно, вам стоит подучить архитектуру компьютера, в частности процессор x86 и память, и как они связаны. Наиболее близкий язык, чтобы во всё это окунуться - ассемблер, очевидно. Если интересует именно скорость языка (которая, к слову, для многих задач не критична), то нужно смотреть высокоскоростные компилируемые языки - С, С++, Rust, D, Go, а также близкие к ним по скорости через VM - C#, Java (Kotlin). Узкоспециализированные типа Swift можно не рассматривать, если они вам не нужны для решения задач. Но даже в скриптовых языках (JavaScript, PHP) сейчас очень хорошо со скоростью. Посмотрите также, что такое JIT, тоже удивитесь, если не слышали ранее.
В общем, отталкиваться нужно не от универсальности языка по скорости, а от решаемой задачи. Потому что у языков есть разные плюсы и минусы, и адекватная область применения. Некоторые проигрывают по скорости, но имеют другие преимущества - удобство, документация, надежность, скорость компиляции, комьюнити, средства разработки и отладки, популярность, а иногда даже вообще возможность использовать только этот язык в конкретной сфере. Например, в браузере, как ни крути, а придется иметь делать с JS (без извращений), а какие-нибудь шейдеры вообще на отдельных языках пишут, про которые мало говорят.