What you are describing are conditional value lists where you get a list of values from a table but only those from records that meet some kind of specified criteria--such as the type of company.
See this thread: Custom Value List?
Both "option 1" and "Option 2" can be made to work for this. Option 1 gives you permanently "hardwired" lists of values and don't require adding more relationships in order to get this to work. Option 2 makes for a 'selectable' value list where if you put a value such as "vendor" or "contractor" in a field and then only companies from records of that type appear in the value list. This is more flexible, but requires adding a new relationship to a new occurrence of companies.
A calculation such as:
If ( Not IsEmpty ( FilterValues ( CompanyType ; "Vendor" ) ; CompanyName )
can be used with Option 1.
WIth option 2, you can use your check box formatted field as a match field in the relationship and a record will match across the relationship for any value selected in the check box field. If "vendor" and "contractor" are both selected, the record will match to "Vendor" or "Contractor" in the match field on the other side of the relationship.
More links on conditional value lists:
Knowledgebase article: http://help.filemaker.com/app/answers/detail/a_id/5833/kw/conditional%20value%20list
Hierarchical Conditional Value lists: Conditional Value List Question
Feel free to post follow up questions here if those links aren't enough to get your value lists working correctly.