Für die Variablen in den for-Schleifen kannst du kleinere Datentypen verwenden. Also anstatt int eben nur einen unsigned int mit 8 Bit (uint_8t). Ebenso mit "int bit=...". Die Variable bit kannst dir auch schenken, wenn du gleich if(uartbuffer[]...usw...) schreibst.
Wenns wirklich zeitkritisch ist, dann würde ich die innere Zählschleife weglassen und den Inhalt 8x nacheinander hinschreiben.