I would suggest using both custom fields and different profiles to alter the views of each department.
Using the custom fields as required you can then show or hide as needed for each departments profile and view. I would also use custom actions to generate department specific forms for creation of the request using the fields required for that department. In a similar way I would have a request type field that you can use to designate which department the request has come from. This could also help with filtering views for each department so they only see their own requests.