Почему вызов метода класса гораздо медленее вызова обычной функции и как это исправить?
Подозреваю, что дело в оптимизаторе. В первом примере компилятор понимает, что цикл ничего не делает и вырезает его весь нафиг. Во втором же случае, разделение на файлы не позволило оптимизатору убрать цикл. Можно покрутить опциями оптимизатора, что бы была кросс-модульная оптимизация (не помню правильное название), но в итоге вы будете сравнивать пустоту с пустотой. 

Правильнее добавить в тестируемую функцию какую-то работу. Тогда вы будуте действительно сравнивать вызов функции и метода. Или отключить всю оптимизацию.
Дело тут ещё и в методах измерения. По-хорошему, нужно взять любой тестовый фреймворк, будь-то google benchmark или там catch2, который позволяет осуществлять замеры производительности. В нём создать два бенчмарка и смотреть на разницу. Если она будет какая-то существенная, то брать профилировщик, правильно компилировать проект и смотреть что занимает больше всего времени выполнения.
А уже после этого можно играть с флагами и смотреть какой код генерируется в обоих случаях. Можно и до в этом конкретном случае.

И вот тогда вы сможете ответить на вопрос почему на вашем компьютере что-то работает медленнее или быстрее. А потому можно ещё и обнаружить, что для разных архитектур и/или компиляторов будет генерироваться разный код, будут применяться разные оптимизации и производительность может отличаться.

PS
Но у вас скорее всего и правда оптимизатор код выкидывает в первом случае всё считается во время компиляции, а функция встраивается. Во втором случае это сложнее.
Вот тут ещё можете посмотреть какой код генерируется и с флагами поиграться: https://www.godbolt.org/