I've been looking into implementing the approach from the following paper. It's very nicely written and easy to follow. It also doesn't require trying different join permutations. I'm starting with several additional restrictions (only equijoins, no aggregations, etc.)
Thanks to Jesus Camacho Rodriguez for his help in sorting out some issues with the rule so far.