How does the optimizer of Firebird determine join order? As Most query optimizers determine join order via a dynamic programming algorithm pioneered by IBM's System R database project, I was wondering whether the optimizer of Firebird uses the same strategy? And is there any documentation I can refer to?
The firebird-devel list on yahoo would be your best bet. Google "firebird query optimizer" and look for Dimitry Yemanov.

I don't think there are any better answer(s) to the question(s) than refer to firebird-devel. The system is developing quite quickly, and if I recall correctly, even fundamentals like how the optimizer works internally may be impossible to find out without either reading the code or checking on the devel list.

Yemanov is a major contributor to Firebird and anything he says might give some clue, but then again, a slideshare may not have enough detail. There is the Firebird Book by Helen Borrie, but again, the question may be beyond its scope.