Используешь промежуточный результат?
cat test.py && python3 test.py
import timeit
setup = 'my_list = [str(i) for i in range(100000)]; s = ""'
print('join', timeit.timeit('''
"".join(my_list)
''', number=1000, setup=setup))
print('for loop', timeit.timeit('''
for i in my_list:
s += i
''', number=1000, setup=setup))
print('join', timeit.timeit('''
"".join(my_list)
''', number=1000, setup=setup))
join 1.1196177779929712
for loop 6.04732857599447
join 1.101941307002562