D'après mon expérience, la pagination est toujours plus rapide si elle est laissée à la base de données. Après tout, une base de données est conçue pour interroger et manipuler d'énormes quantités de données.
Si vous renvoyez de grandes quantités de données dans .NET et que vous les "mettez en cache" en session, vous manquerez rapidement de mémoire sur votre serveur.