By type
/Controllers/Events/Models
By topic
/Comments/Posts/Users
By topic, then type
/Comments/Controllers/Events/Models
/Posts/Controllers/Events/Models
/Users/Controllers/Events/Models
Mixed
/Comments/Controllers/Events/Models/Posts/Users

At the top level I separate early into two categories: infrastructure and domain. This is where the "not being coupled to the framework" is guarded. In the domain I only separate by context, not topic, not type. A simple "test" for a namespace would be to see if you can use it in a sentence like "How are/is Y defined in the context of X". This takes into account that an idea/entity/vo/concept is represented per context in which it's applicable. For instance, when you have hour tracking in the context of a user "Hours Worked" may have a different representation when in the context of "reporting" or "management".