Na ja, I2C (Hardware) und UART (Hardware) haben doch in sich einige Pausen, die man ausnutzen kann.
Ich würde die ganzen Funktionen so verschränken, daß für alle was bleibt.
Aber was zu tun ist, ist zu tun, klaro.
Den Datenstream mit dem PC würd ich in Chunks aufteilen, damit man andere Messages dazwischen reinquetschen kann.

Mit einem zweiten uC kannst du natürlich auslagern, auch klar.