Try the simple approach first. Make it right, then make it fast. And modern computers are so fast you may find that the simple approach works well enough anyway.
Beyond that there are two useful techniques in collision detection.
Assume that movement is gradual rather than jumpy, so always test first to see if the same cube that matched last time is still a match.
Organize your scene graph, or at least the objects you can collide with, into a spatial hierarchy so you can eliminate whole groups of objects with a single test.
For more info, chapter 17 of the 'Real-Time Rendering' book. Useful keywords for searching are BSP tree, quadtree, octtree.