I have a folder called scripting. Under that folder I have two other folders called vbscript and one the PowerShell. In the PowerShell folder, I create subfolder and the folder name depends on what I am working with. Ex. AD,Sccm,Gpo
Efficient methods really depend on the person and environment. Personally most of my scripts are pretty short so I have "Testing" and "Archive" folders for WIPs and finished scripts respectively, and I just give them descriptive names.
Currently I can find everything I'm looking for easily but when the library expands to the point this is less easy I can use Get-ChildItem | Where Name -like "*keyword*" – To go a step further I use Get-Content and search the scripts themselves. Could even add these to a module so you only need to type Get-Script "*keyword*" or something and have a switch to open results in the ISE.
If you have several categories you may wish to split them into subfolders but for me this would only confuse things as my categories would need to be so specific I'd find scripts applying to more than one, so again it depends on what you're doing and how you like working.