I would only flatten where there is a distinct maintenance advantage to do so.
Namespaces are more for organizational purposes with the added benefit of helping to reduce naming conflicts. I tend to keep my namespaces in-line with the .NET Framework and other major library namespaces. This helps others to find classes easier. (As you say, discoverable arrangement.) For instance, my path utilities are under Missico.IO.Path, my data access library under Missico.Data, my application's data access under AppName.DataManager (which uses Missico.Data and all other data namespaces).
I always use my last name or the company's name at the root namespace. (Any noun will do.) This allows the user (programmer) to easily resolve naming conflicts with a simple name change in source code or an using alias for library references.
using Company = Missico;
String x = Company.IO.Path.CommonPath("", "");
I try to keep a folder for each namespace. Nesting the folders if the namespaces are nested. This helps me and others to find source code quicker because they are familiar with the namespace structure. Why make them learn two structures. Each folder contains all the source files for that namespace, except for complex classes. They get there own subfolder (without changing the namespace.) I may end up with a namespace folder that contains four or five subfolders for complex classes and supporting classes.
Note that since defining a System namespace will cause all kinds of trouble, I use Core as my "system/global" namespace.