You could take some free code like
http://www.codeproject.com/csharp/watermark.asp , and stream it to the client instead of making an actual jpg file. You would reference your image as <img src="watermark.aspx?id=9345" /> or somethign similar.
watermark.aspx would be a blank aspx page where all the work would be done in the codebehind on the page_load handler. It would have a piece of code like this:
// Change the response headers to output a JPEG image
this.Response.Clear();
this.Response.ContentType = "image/jpeg";
// Stream data here
That's a basic overview, but enough to get you started... Of course, it would be easier if you watermark your images before the fact that way you do not waste CPU time doing it over and over (plus you get to display the images at design time).