O que você está propondo é essencialmente uma variação do Problema da Mochila , com o toque adicional de que, devido à compactação de arquivos, você não começa a saber quanto da sua "mochila" de 20 MB cada item ocupará.
A solução trivial, é claro, seria simplesmente compactar cada arquivo de forma independente, mas isso não reduz a contagem de arquivos, portanto desconfio que não seria uma solução satisfatória.
Se eu me desse esse problema, acho que começaria compactando cada arquivo individualmente em um local temporário (ou na memória, sem gravá-los no disco), apenas para obter um tamanho compactado aproximado para cada um. Com essas informações, seria possível decidir quais arquivos deveriam ser agrupados por qualquer uma das abordagens padrão do Problema da Mochila e criar os arquivos zip reais.
Supondo que você tenha uma linguagem de script disponível e que saiba usá-la, espero que essa abordagem seja bastante simples de automatizar; fazê-lo manualmente seria muito tedioso se você tivesse mais do que um punhado de arquivos para lidar com ...