Я чуть переделал код - подключил библиотеку TFT из стандартной поставки Arduino IDE.
//#include <Adafruit_GFX.h>
//#include <Adafruit_ST7735.h>
#include <TFT.h>
#include <SPI.h>
//#include "SFRegular10pt7b.h"
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8
// Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
TFT tft = TFT(TFT_CS, TFT_DC, TFT_RST);
и измерил время отрисовки:
шаг 1 пиксель - 5380 мкс,
шаг 2 пикселя - 8070 мкс,
шаг 4 пикселя - 13450 мкс.
итого - 2690 на перерисовку одного битмапа. Это примерно 220 тактов CPU на пиксель, 110 тактов SPI на пиксель или 55 тактов SPI на байт. Т.е. раз в 6 ниже теоретического минимума.
Но, учитывая, что на отрисовку расходуется 5 мс, а на паузу между отрисовками 50 мс, попытки что-то оптимизировать мне представляются не слишком актуальными.