You could try splitting the single, large zipfile into multiple,
smaller zipfiles. Zip all the contrib modules individually, for
example. It may be a win to leave some parts of django unzipped (the
parts which are used on every request, say), but leave less-used parts
zipped. The __path__ variable and similar can be used to stitch the
pieces back together:
http://docs.python.org/tutorial/modules.html#packages-in-multiple-directories
It may also be worth experimenting with the compression ratio of the
zipfile. If i/o is the bottleneck, a higher compression setting may
produce quicker imports. If cpu is the bottleneck, lower compression
may be faster. It is possible to use zero compression in a zipfile, if
needed, in which case it is like tar.
You could also alter the order of the source files within the zipfile.
Experimentally, trace the import order for a popular sample URL, from
a cold start. Add those files, in import order, to the zipfile first,
then append the rest. Hopefully at runtime they will stream out of the
zip in the order in which they are used and this will be more
efficient.