Yep, if you have a $http object with cache set to false, your cache system will be ignored ;)
I don't know if it's the best solution ever, but it seems simple and in accordance with the principles of Angular (testability, modularity).
Interceptors are just here to change request or response but, to my knowledge, you cannot make a function that update both request and response in a row.
With a request interceptor, you can only change request config or prevent the request by returning a rejected promise.
A response interceptor will not be helpful in this case either..
I think that a custom cache system is the best solution in this case.
Regards,