Measure precise time in microseconds

Hello, welcome to the forum.

Can we go back one step please ?
You want to measure a frequency from a GPS. What is that signal ? Can you get the same information via I2C ?

The ATmega328P is only a 8-bit microcontroller at 16MHz, but it is optimized for fast input and output and has versatile timers to create pulses or to measure pulses.
The code that is running on the ATmega328P is simple and limited. That is its strength, together with the timers.

Other processors are more complex, and sometimes the Arduino code has to do more to make the Arduino layer compatible for every board. New processors might have hardware for floating point and 32-bit instructions, but not the simple code of a ATmega328P dedicated for fast input and output.

If you want to see optimized code that uses the timers of the ATmega328P, then have a look at these:

They have a link to Github for the source code.
What is the range of the frequency ?