efficient way to apply content permissions My site has content type "Department News". There are 10 departments, each one should have permission to create and edit its own "Department News", everybody can view everything.

How to implement it?

My idea is to create 10 roles - one for each department - and the only difference between them will be Create and Edit access to a specific content type.

Then create 10 identical content types, just named differently - and configure permission for the Department-Content matrix.

The question: is it possible to implement it somehow more efficiently, at least without creating 10 content types which are identical, only for the purpose of assigning permissions to them. Best would be also to get rid of the 10 roles and e.g. check additional permission for "Department News" based on a field in user profile.

Duplicating almost identical roles and content types is a burden from maintenance point of view.
Have you tried looking into Organic Groups?  It seems like the PERFECT solution to your problem.  It'll require a bit of work to set up, but the benefits will FAR outweigh the work.

You could have each department set up as a group, and then users can be assigned to those groups.  You can then set permissions that allow users to create content but only for their specific group (using OG means that this can be ONE content type).

You'd only need one user role (an organic groups user..you could also have a department admin per department should you want).

You can also do some more awesome stuff from here on out.  Just as an example, these departments could then view their own department content - but you can also display all posts from all groups.

There are some REALLY good videos at Modules Unraveled