I built a simple Morse Code program - in need of optimisation

Bene:
Also, how does using Flash improve the situation (practically) over RAM?

For a small program you won't necessarily see a benefit. However, if you later decide to add a list of canned messages or add some features/functions you may approach the limits of RAM (UNO = 2K). This is not good as the stack also lives in RAM. Putting those messages in PROGMEM (UNO = 32K) frees up the RAM space they occupied, albeit at the price of a slightly more involved method of accessing them.