Ein Problem bei deinem Code dürfte das digitalRead() sein. Das ist bei Arduinos als ziemlich langsam verrufen.

Bei mbed gibt es da die Möglichkeit mit PortIn alle 32 Pins eines Ports auf einmal zu lesen, das wäre für die Abfrage mehrerer Encoder sicher viel besser.

Eventuell gibt es in den Untiefen der Arduino Software dafür auch Funktionen ...