assumption that the .. cache ..., MD5-based, is collision-free
Huh? That is a lousy assumption to make, no matter *what* hash you use to index a cache, you can *never* assume it is collision-free!
Trivially, every hash will generate collisions, it is inevitable: reducing every single input to a fixed-size hash of k bits means that as soon as the world has processed 2^k + 1 inputs there *must* have been at least one collision. The point at which there is a 50% chance of hitting a collision is a far, far smaller number than 2^k
2^k may be a huge number, but it is not a guarantee that no collisions can occur. So that cache was going to break for someone, somewhere, even without any malicious intent. It was just a low probability that it would be *your* system that was impacted today.
Certainly hope that no other code is using a cryptographic hash as an index and assuming that the results are unique <cough>
Remember, breaking a hash, the way MD5 was broken, just means that the task of *finding* a collision with a specific target is a lot easier (trivial, even); it doesn't mean that such collisions are impossible.