http://msdn.microsoft.com/sql/default.aspx?pull=/library/en-us/dnsql90/html/sqlruleengine.asp
Interesting article. We do similar things in some of our stored procedures. Rather than writing dynamic SQL, you can write
(@ip_parameter IS NULL OR Column = @ip_parameter).
The advantage of doing this is that you should only have one execution plan rather than a number of plans for the dynamic SQL, and the code should be easier to maintain.
http://msdn2.microsoft.com/en-us/library(d=robot)/ms187815.aspx
However, care must be taken which parameters are used to generate the execution plan. I've had problems with the past with this and wouldn't use either method for performance critical sections - instead I'd break down the stored procedures into separate sp's