All those are good and valid idea's... but there are drawbacks.

I did a thread on this... "Making Program Code Space your playground" last November. Do a search on "Playground".

Yes, you can use EEPROM space too... it's just that with EEPROM there is a time-factor of around 10mS in the write operation.

I use both those methods for storing strings for LCD Displays... things like Setup Menu Trees etc... as MeLabs string handling is cumbersome for large quantities of messages etc.

Being too slow during the write cycle, neither are any good however for fast applications (like using a circular buffer for Serial Comms for example).