It seems like this really depends on the nature of the code... for gluey stuff slinging data this may be true. For most algorithmic tasks, the coarser module should be preferred.
Even then it depends. If you are optimizing across computational cycles then I think this article applies (simple example would be a better sort algorithm). If you are optimizing across data retrieval then yeah, your probably right, its much harder to have good separation. Luckily, in this case, your algorithm might still be useful even if the platform changes (unless data retrieval and storage is optimized in the new platform to the degree that your nice algorithm just isn't worth keeping).