Organizing assets is hard because the dependencies are complex and change often. We solved this at a previous company using in-game editor tools (material editors, level editors, character editors, AI script editors, etc) that all interfaced with a database back-end. The database didn't store the files, those were stored in Perforce (which the tools interfaced with as well). The database just stored metadata for each version of each asset along with the relational links between assets. So, for example, a particular 3D model referenced a particular material (storing just its id/foreign-key in the DB), which in turn referenced a set of textures and perhaps a shader.

An asset browser allowed you to perform queries (e.g. show me all the characters from level X which reference materials which reference texture Y). We had tags/labels, comments, everything you could want.

When you do it like this your folder organization becomes irrelevant. You can store everything in a single directory with a GUID for a filename if you want. Or store all textures in one place and all 3d models in another. The down side is it's quite opaque, everything must be done within your toolset, so you need great tool support.