Os arquivos de mídia são diferentes das partes do seu sistema que contêm a lógica do aplicativo, pois o fornecimento de arquivos de mídia é uma tarefa intensiva de E/S, enquanto a lógica do aplicativo geralmente requer alguma combinação de E/S e CPU (o equilíbrio exato depende muito do aplicativo). É por isso que realmente faz sentido usar um sistema de serviço de mídia dedicado otimizado para taxa de transferência de disco e rede

Algumas diretrizes gerais se você usar seu próprio servidor dedicado:
- Invista em muita RAM e use o cache para o conteúdo mais consumido. A ideia é economizar tempo de acesso ao disco (a RAM é aproximadamente 100 vezes mais rápida em teoria). Memcache é a solução mais popular hoje em dia afaik

- Invista em IO de disco rápido, instale vários discos e use RAID (striping) para melhorar a taxa de transferência

- Ao selecionar um provedor de hospedagem para seu(s) servidor(es) dedicado(s)/co-lo, concentre-se na largura de banda

- Se possível, você deseja localizar os arquivos próximos aos seus consumidores para melhorar as latências da rede. Assim, por exemplo, arquivos de mídia em português do Brasil se beneficiariam se armazenados em um servidor na América do Sul

- Um bom CDN pode resolver praticamente todos os itens acima. Em minha própria experiência, isso reduziu a carga em nossos próprios servidores em aproximadamente 85%. Usamos Cotendo e Akamai. Outros provedores que você pode consultar: CDNetworks, Limelight, Level3

Se você está apenas começando, sua melhor aposta é usar o S3 para armazenar seus arquivos, com o CloudFront como seu CDN. Em minha própria experiência, é uma solução muito simples de configurar e bastante econômica
*ao começar* - como custos linearmente com a quantidade de dados e uso. Além de um certo limite, porém, faz sentido começar a gerenciar seus próprios racks de armazenamento dedicados e usar algum outro CDN.