just use the salv_om model, there is no field catalog at all! It will use the dictionary definitions by default and it is easy to change them if necessary.
You can find a basic example here: http://zevolving.com/2008/09/salv-table-1-normal-alv-table-display/
You can also search for a SAP package (*SALV_OM*), which has several examples with it.
Also, it is ok to use an INNER JOIN. It is more efficient and easier to read than a bunch of "select for all entries in" statements. Every time you have a select it has to open a connection to the database, find the results and transfer them back.