Controllo Stato Sensore Laser : Interrupt o Loop ?

Se puoi evita la callback e usa direttamente la ISR, questo per ridurre al minimo possibile l'overhead della chiamata a funzione. Nella ISR puoi prendere solo i tempi, occhio che il timer di millis() si ferma quando il PC salta dentro la ISR quindi la prima cosa da fare è salvare il tempo.

Per salvare il tempo potresti usare un array di due elementi e incrementare l'indice 0, 1, 0, 1
questo ti permette di scrivere meno codice nella ISR, es:
ISR {
startEnd[index] = micros();
index = index + 1 % 2;
}

su startEnd[0] ci sarà il tempo di start e su startEnd[1] il tempo di end
Quando index == 1 il tempo di end è stato già preso e nel loop puoi fare il calcolo e allora azzeri index.

Ciao.