Angabe deiner Hardwär wär hilfreich (Controller, Takt, ...)

IMHO ist eine Frequenz von 500kHz bei F_CPU = 16MHz zu hoch für den angesprochenen Ansatz. Es würde bedeuten, daß man einen totale ISR-Zeit von 32 maximal Zyklen hat.

Leider ist es bei AVR nicht möglich einen Timer von extern zu starten oder zu stoppen.

Ich würde es folgendermassen lösen: Manche AVRs haben T0/T1 Eingänge, durch die man Timer1 takten kann. Der Takt von Timer1 wird also nicht vom MCU-Takt abgeleitet, sondern kommt von extern.

Also so:
1. Referenztimer (irgendein Timer ausser No.1) zurücksetzen
2. Timer1 zurücksetzen
3. Timer1 auf extern zählen lassen
4. Referenztimer starten
5. Warten
6. Referenztimer Stoppen (zb in einer ISR)
7. Timer1 stoppen und Wert nehmen (zB in der gleichen ISR)
8. Auswertung

Timer1 kann geprescaled werden, ebenso der Referenztimer.

Beachte, daß die Zählereignisse synchron mit dem MCU-Takt erfolgen. Das ist für die Fehlersbabschätzung. In die Fehlerabschätzung geht ebenfalls mit ein: Zeitdifferenz zwischen Einschalten der Timer, gleiches gilt für's Aussschalten. (Eine Messung ohne bekannte Fehlergrenzen hat keine Aussagekraft )

ALternativ lässt man Timer1 auf extern bis auf einen OutputCompare Zählen und nimmt in OutComp-ISR von Timer1 die Zeit von TimerR.

Neuere AVR haben eine PLL vor der I/O-Clock, mit der man den I/O-Takt bis auf 64MHz bringen kann. Ab das tafür taucht oder nur für PWM erfährst zu im Datenblatt. ZB ATtiny26/46/86 (oder 25/45/85, kann ich mir nie merken).