You are correct, because the community attribute in a term is a logical or, you will need to have two terms to successfully check for routes with both community set.
I would do this as the final check in the policy
The first term will check for 65000:10 and if present proceed to the next term.
If not present proceed to the the final policy in your chain or end
The second term checks for 65000:20 and if present does the desired action
If not proceed to the final policy in the chain or end