Yes, that's right, I'm not doing an intersection. 

This is the filtering algorithm required to work around the limitations and results provided by the `mozContacts.filter` request:

1. Let _found_ be a register of confirmed terms
2. Let _contact_ be a contact record.
3. For each _field_ of [givenName, familyName]
    - For each _term_ [...input list]
        - For each _value_ in _contact_[ _field_ ]
            -  If _found_[ _term_ ] coercible to **false**
                - Set _found_[ _term_ ] to the result of comparing _value_.indexOf( _term_ ) to 0
4. If every value of _key_ in _found_ is **true** return *true*, else return **false**


So instead of accepting all found contact records, then doing an intersection on each set (which will still have to follow the above steps) and because the filter will limit to 10 results, each contact in the result set is checked and only accepted if the above algorithm returns true. This results in a behaviour that exactly matches existing platforms.

I've added the above description to the code comments in contacts.js