for making field mandatory based on condition you may try to use field validation settings: Conditionally require column based on value of another.
For second question: in OTB solution it is not possible to restrict user access to particular fields (smaller element which may have unique permissions assigned is list item). You may create custom form for submitting items to the list (e.g. using SPFx web part) and implement these advanced rules there. But it will require programming.