Question 1:
Two database tables... Is it two different databases or just two tables in the same database? If it is two different databases, you have to use two different communication channels. If two different tables in the same database, you can use select query with join and handle this.
Question 2) If it is two different database tables.. You can achieve this without bpm like this.
First jdbc sender for selecting the project Id then use a) rfc lookup against project Id in the mapping and then do the second lookup for jdbc in the same mapping for milestone with the rfc return data and map all the values in the idoc receiver structure. This way you can avoid bpm. I dont go bpm with jdbc all together in the same scenario.
Queston 3: You can avoid using two different structure. Like the way I explained. just use select query for the projectId in the sender message structure and stay with just one messg structure.
Hope this helps.