Строки
Serial.print(" time=");
Serial.println(time3);

съедают астрономическое время. Во-первых это передача как минимум 7 (или 8) байт в uart. Что даже при скорости 115200 займет 115200/9/7 то есть 1/1800 секунды. А у тебя импульсы следуют 5 тыс раз в секунду. Это почти мгновенно должно приводить к переполнению буфера отправки.

Кроме этого еще непосредственно Serial.println(time3) занимает кучу времени - нужно же преобразовать int32 в строку циклическим делением. А AVR аппаратного делителя не имеет.

Кроме этого, micros() возвращает время с достаточно плохой точностью.

Поэтому:
1. Никаких делений и отправки данных в прерывании.
2. Лучше воспользоваться собственным таймером.