You can try creating a smart list with the filter "Member of SFDC Campaign: person is not in". Then click the green "+" sign and in the left drop down, you can select every single SFDC campaign. The resulting smart list will populate with every person that is not part of any SFDC campaign.
The problem with that is whenever I have new campaigns, I'll need to add to the Smart list. I'm trying to see if there's any automated way to do this.
There is not way to make it simply without to have to add any new campaign manually. The list of operators in the "member of SFDC campaign" is too limited.
The only way I see is to have a field on the lead and contact and a trigger, workflow or process builder in SFDC on the campaign member object. Each time you add someone to a campaign the contact / lead field is updated with the campaign name. Then you filter on this field being empty.
That's a good idea. I do have a field showing most recent campaign engagement. I think I can make it work by filter on the that field.
I wish there's an option that we could filter any leads/contacts that are not in any SFDC campaigns.