По п.3 я имел ввиду подход, когда каждое состояние кодируется отдельной функцией (для проверки условий перехода), вызваемой по-указателю. "По индексу переменной состояния" -- эту оптимизацию компилятор умеет делать автоматически, для оператора switch. При менее чем ~8 вариантах выбора она не делается (тупо сравнивать и условный переход, опять же быстрее, на контроллерах профессионального уровня, где иначе через TBLRD с каждым байтиком указателя мучаться).