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 jcamachorodriguez for his help in sorting out some issues with the rule so far.