I would do it on the source. It performs much better.
Alternatively, I would join schedule a job for night time which joins 15 tables, and store the data in flattened table, and then use data from flattened table as a source.
SSIS lookups can be expensive operations.
------------
🙂