Storing an array of function pointers
This is not a direct answer to your question, as I have no such answer,
and I believe the answer you are seeking would be of no use to you.

The problem with your question is that your method of testing memory
usage is heavily flawed. By removing the switch statement, you most
likely have allowed the linker to remove lots of methods referenced by
it, leading to huge memory savings. Those savings do not mean the
culprit is the switch statement itself.

The correct way to test static memory usage is to use either
avr-objdump or avr-nm. You have to find where the IDE puts the
compiled elf file, then you can issue the command:

avr-nm --size-sort -Crtd my_program.elf


This will give you a list of all symbols in your program sorted by size.
Symbols of type 't', 'w' and 'd' (upper or lower case) eat flash.
Symbols of type 'd', 'b' and 'v' eat RAM.