Проблема в драйвере LCD.
Другого драйвера в природе пока нет - точнее не удалось обнаружить.
На выдачу одной строки уходит в 20 символов тратиться 27 ms.
Давно решаю проблему с распределением вывода на LCD используя псевдо RTOS на FLProg.
Драйвер этот давно хочется переделать, но все как-то откладывается...
Такие же проблемы были c драйверами HC-SR04 (это решил по прерыванию), c DS18B20 (это решил через упомянутую RTOS), DHT - одно измерение (например 1 раз в секунду) тормозит примерно на 5 ms (в планах переделать).
В основном проблемы возникают из-за использования в драйверах двух очень вредных команд - delay() и pulseIn(). На время выполнения этих команд контроллер "зависает" - возможно работают только прерывания, которые традиционно в Arduino используют слабо и неохотно. В частности использования прерываний от таймеров ограничивают использование некоторых пинов в режиме ШИМ.
В своих пользовательских блоках FLProg пока тоже не используя таймера, чтобы не идти поперек реализуемых авторов некоторых правил, но думаю что вопрос этот перезрел...
Полезный материал на тему таймеров и аппаратных прерываний:
http://arduino.ru/Tutorial/Arduino_Interrupts