Почему мне кажется, что Python быстрее C?
Вкратце - в теории, при правильном написании быстрее написанного человеком кода на си может быть только код, написанный человеком прямо на асме. На практике - код на асме, скорее всего, будет медленнее - компилятор си знает кучу всего, чего человек может не знать/не учесть, так что сгенерит код эффективнее.
По этому случаю - тут слишком много вопросов)
Какая ось? Чем собирали сишный код? Может, c код вы в дебаге собрали?)
Ну вот пример убунты (python3 vs gcc)
Раз вы говорите про заметную разницу на 300000 итераций давайте просто поставим лимит в 500000 и сравним утилиткой time:
#include <stdio.h>

int main()
{
  int i = 0;
  while(i != 500000) {
    printf("%i\n", i);
    i += 1;
  }
  return 0;
}
Против
i = 0
while i != 500000:
  print(i)
  i += 1
Смотрим, что вышло:
$time python3 test.py 
...
499999
real	0m6.472s
user	0m0.985s
sys	0m1.063s
6 с копейками секунд. Теперь сравним с решением на c, которое скомпилим по дефолту gcc test.c:
$time ./a.out 
...
499999
real	0m3.241s
user	0m0.234s
sys	0m0.749s
3 с копейками секунды.
Уже как-то расходится с вашими наблюдениями, так что вопрос про систему/компилятор/параметры сборки сишного кода актуален)
Не говоря уже о том, что (как сказали выше) замеры скорости по выводу в консоль - вообще плохая идея
подобные примитивные операции все современные языки будут +- одинаково исполнять.  разнеицу в быстродействии вы увидите на тяжелых операциях - память, объекты...