We store big queries results in memcached. We developed a extension to Enyim. In this extension, we store an item for every row in the query resultset and a 'index item' with the collection of row keys. So, we access to the entire collection of rows knowing only the 'index key'. You have to decide what happen with the entire collection when some of the row items is expired, updated or deleted (maybe you can use the remaining set or you have to invalidate all, depends on your needs).
I don't have any trouble with sharing our extension. Regarding the trigger notification, one solution could be to store a .net procedure in our sql engine and executing it inside the trigger. I must admit Sql Server is not the database I feel most confortable working with and I didn't try how well the built-in Sql Server .NET CLR manages tcp conections, concurrency, etc. but it would be a solution. On the other hand, if you put it in a trigger take into account that an error in the update should not Carlos.