Qual é a diferença entre polimorfismo e genéricos?

O outro nome para "genéricos" é "polimorfismo paramétrico", então… :)

Mas suponho que você esteja perguntando sobre a diferença entre polimorfismo paramétrico (genérico) e polimorfismo ad-hoc (sobrecarga)?

No polimorfismo paramétrico, será escrito um "modelo de código" que pode ser instanciado com muitos tipos diferentes (os parâmetros de tipo). No polimorfismo ad-hoc, serão fornecidos trechos de código completamente separados para lidar com cada tipo diferente (daí “ad-hoc”) - eles não necessariamente virão todos do mesmo “modelo”.

A maioria das linguagens modernas populares suporta os dois itens acima, além de um terceiro - polimorfismo de subtipo, também conhecido como herança (este parece precisar de suporte em tempo de execução - resolução de método virtual - enquanto os dois primeiros são na maioria construções em tempo de compilação).