I am wondering if you could setup you Contacts:: and Companies:: with a join table called Activity:: and make your portal show in the Contact:: table so that any time has Company:: has relation with Contact:: it shows up via the context. If I am accurate with understanding in what you want, I will say then you could use a field in Activity:: to show what the activity was about(a scrip could be helpful with that). So you portal would show the records from Activity::. Then you could filter it to your needs. Let me know if I am understanding this correctly.
Sorry for my lack of a thorough explanation. This relationship is from the activity table. Activity is required to have a contact ID and encouraged to have a company ID but the company value list is limited to those companies that have relationships with contacts.
I have a recent company activity portal and a recent contact activity portal and I would really like to see them in the same list.
Attached is a sketch of my basic table occurrences.