I chose not to go with the Perl decompression libraries because I want to allow for multiple formats (bzip2, gzip, zip, etc) without a whole lot of extra code.
Reasonable. Although note that IO::Uncompress::AnyInflate supports zip and gzip, so you might be able to use that for those formats if it seeks faster, and fall back to a pipe/pseek solution for bzip2.