Нет ничего (на мой взгляд) не так с вашей первоначальной мыслью.
Хотя есть петля , как вы выразились, здесь нет проблем.
Наличие companies.MainContactEmployeeID
обеспечивает наличие только одного такого контакта на компанию.
Затем добавление внешнего ключа Companies(CompanyID,MainContactEmployeeID)
: Employees(CompanyID,EmployeeID)
гарантирует, что сотрудник действительно работает в этой компании. (Требуется также соответствующий уникальный индекс для таблицы Employee).
Такой внешний ключ возможен только из-за «цикла». Это, конечно, не проблема.