I think the second option might be what I'm looking for, that or using a hall effect sensor. The debouncing code I have been using is similar to yours:
void rotation() {
dT = ((micros() - last_micros)/1e6);
if(dT >= debouncing_time / 1e3 && dt <= 10) {
Serial.print(dT);
Serial.println(" dT");
last_micros = micros();
}
}