Le problème avec la différence entre appeler SP directement et à partir du code .NET, peut-être dû au reniflage de paramètres. SQL Server met peut-être en cache un plan d'exécution qui n'est pas optimal pour les paramètres que vous transmettez à partir du code.
Pour éviter cela, essayez d'ajouter WITH RECOMPILE à votre définition SP, par exemple
CREATE PROCEDURE MySP (
... parameters...
) WITH RECOMPILE
AS
BEGIN
...