It may be, as Coding Badly suggests, that switch-case gets compiled as a lookup table with jump offsets. That could explain the larger code, but I would much rather see this fixed in the code generator, than having to rewrite my code.
The comment below is from the Arduino bootloader source.
/* A bunch of if...else if... gives smaller code than switch...case ! */
Then what is the nature of the larger code? Is it a fixed overhead for every switch-case statement or is a shared library segment used to handle the lookups? Is the difference significant for a small, large (how large) number of case entries?