Here are the results of my tests with zlib (in seconds of boot time):
Athlon XP 1800+ uncompressed: 5 compressed: 8 1.6x slower
UltraSparc IIe-400 uncompressed: 9 compressed: 23 2.5x slower
Pentium II 300 uncompressed: 11 compressed: 32 2.9x slower
zlib will read uncompressed files transparently, I found stdio to be a tad bit faster than the above uncompressed times, but not by much. As a result DOTDII uses the compressed area files routines, but I don't compress my area files because it's just too slow (my production server isn't the Athlon).
My first iteration resulted in worse than 10x speed boots, I never did let it finish booting, it was going on 10 minutes. The problem as Druid mentioned is there is no replacement for 'ungetc', so you have to use 'gzseek' which is EXTREMELY slow.
So the obvious thing is to remove as many gzseeks as possible. I did this by slightly changing the area file format. In SMAUG, records like mobs/objs don't have a terminating character, the end of record is determined when the next record (starting with #) is found. So I created an end of record character 'S' and resaved all the area files. During loading the code can skip the ungetc of '#' and thus save some time.
Another speedup is the line number display in low_bug, which uses fseek/ftell. If you sacrifice that feature you gain a little more speed.
Finally, if you cut down on getc's and use fgets instead, you will improve performance of both stdio and zlib.
On DOTDII, before compressing my area files are 8740kb, after 2320kb, so I would save 6420kb disk space.