pulse width / period measurment with offset

Your Post is very long so I may have missed something.

3.7 millisecs is a very long time for an Arduino

I don't understand why it is necessary to detect TDC specifically. Isn't it sufficient to detect some event before TDC that is a known time prior to TDC? Wouldn't that leave more time for your calculations?

If you want to measure speed or detect an event with precision then don't use analogRead() as it is a relatively slow function - takes a minimum of about 100 microsecs. Instead arrange your sensor to produce an digital pulse and detect it with an interrupt. See attachInterrupt() in the Reference section.

This is an extract from code I use to detect the speed of a small DC motor. It works fine up to 16,000 RPM and probably much faster.

volatile unsigned long isrMicros;
unsigned long latestIsrMicros;
unsigned long previousIsrMicros;
volatile boolean newISR = false;


void loop() {
   if (newISR == true) {
     previousIsrMicros = latestIsrMicros; // save the old value
     noInterrupts(); // pause interrupts while we get the new value
        latestIsrMicros = isrMicros;
        newISR = false;
     interrupts();
     microsThisRev = latestIsrMicros - previousIsrMicos;
}

void myISR() {
   isrMicros = micros();
   newISR = true;
}

It would make it a great deal easier to understand your requirement if you can post a diagram that shows the timing requirement.

...R