Tem certeza de que todos (ou a maioria) dos arquivos de 50M serão solicitados? Se não, e se o seu domínio de problema permitir, você pode considerar uma abordagem de "computação lenta". Ou seja, apenas gere (e depois armazene em cache) os arquivos realmente solicitados.
Ainda assim, sim, você desejará usar uma estrutura de diretório aninhada (digamos 3+ níveis de profundidade), de modo que nenhum diretório receba mais do que alguns milhares de arquivos nela. Em seguida, use mod_rewrite para converter solicitações para os nomes de arquivos físicos reais, algo como o seguinte (mas provavelmente com mais verificações e lógica):
RewriteRule (\w)(\w)(\w)(\w+) /path/to/cache/$1/$2/$3/$1$2$3$4 [L]
Por fim, alguns sistemas de arquivos são melhores em lidar com arquivos grandes do que outros, então você pode querer fazer alguns testes e benchmarking com alguns candidatos (por exemplo, ext4, xfs, jfs, reiserfs) antes de começar a produção. / p>