switching to LZMA could save 150MB (25%) on the data archive with 8-16MB more memory required if program loads off archive during runtime.
for data20090403.pk3 :
gzip (current) - 596.2 MB
LZMA (7zip) - 446.6 MB
LZMA sdk is in the public domain or under LGPL with C++ and ANSI C (decompression only): http://www.7-zip.org/sdk.html
It is has good compression and very fast decompression (much better than bzip2)
read the docs to fine tune random access block size, and size of dictionary vs compression efficiency.