Try dropping the Response.End() as this will terminate the thread prematurely and prevent output caching from taking place.
See: http://bytes.com/groups/net-asp/323363-cache-varybyparam-doesnt-work
You may wish to consider using an ASHX handler and using your own caching method.