Restrict custom fields based on user roles

One simple solution: create a custom post type for each level, and use CPT permissions so you can assign them rights to only edit their level of CPT and never see the others. You can then assign a different ACF fieldset for each post type.

Use the same names for fields within the fieldsets, and then when you grab the data it will all be formatted the same way, you’ll just check if(get_field('field_name')) { and do nothing if that field doesn’t exist for that post. Or, you can create a single-{cpt}.php for each post type and control the front end layout that way.