In the past when I have implemented RSS I cached the RSS data in the HttpContext.Current.Cache.
RSS data usually doesn't have to get updated that often (eg. once a minute is more than enough) so you would only have to actually hit the DB once every minute instead of every single time someone requests your RSS data.
Here is an example of how to use the cache:
// To save to the cache
HttpContext.Current.Cache.Insert("YourCachedName", pObjectToCache, null, DateTime.UtcNow.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration);
// To fetch from the cache
YourRssObject pObject = HttpContext.Current.Cache[("YourCachedName"] as YourRssObject : null;
You could also set the following in your ashx:
context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));
This will make your RSS page serve up a cached version until it expires. This takes even less resources but if you have other things that use your RSS data access layer calls then this will not cache that data.
You can also make it cache based on a query param that your RSS might receive as well by setting:
context.Response.Cache.VaryByParams["YourQueryParamName"] = true;