Como você apontou, isso ocorre porque o C#2.0 não oferece suporte a parâmetros opcionais.
Uma solução alternativa pode ser envolver os procedimentos armazenados .NET em procedimentos armazenados T-SQL regulares que aceitam parâmetros padrão.
Por exemplo:
CREATE PROCEDURE TestProcWrapper
(
@TestIntWrapperParam int = null
)
AS
EXEC TestProc @TestInt = @TestIntWrapperParam
É um pouco feio, mas pode colocá-lo no caminho por enquanto.