Зависит от модели процессора, версии и опций компилятора и немножечко фазы луны. В целом без разницы.
Практический совет - лучше писать через индексы, ибо так понятнее и больше шансов что компилятор там все наоптимизирует (например, он сможет векторизовать работу через какие-нибудь SSE инструкции процессора).
Совет по бенчмарку - если памяти не хватает, стоит по одному достаточно большому массиву пройтись 10000 раз. А лучше использовать готовые фреймворки для измерения скорости, вроде того де gbenchmark.
Еще, иногда полезно посмотреть на ассемблерный выхлоп.
Вот, например, что происходит при -O3 опции компилятора. Он генерирует вообще идентичный код для обеих функций (развернув циклы)! И даже при -O2 оно одинаковый код выдает.
Без оптимизаций код
разный, но там все не так как вы думаете. Вместо инструкции
mov eax, dword ptr [rax + 4*rcx]
в варианте с индексами используется инструкция
mov eax, dword ptr [rax]
для указателей. Это самое "складывание с указателем массива" вообще не отдельная операция - а вариант адрессации в инструкции mov. Они могут вообще одинаковое количество тактов занимать, это надо мануал по конкретной архитектуре процессоров читать.