Andrew Price has made the point that almost all other 3d modelling softwares have material presets. Here's how I think this could be accomplished in blender without having to make too many drastic changes, and without taking away the opportunity for the user to learn how it was done.

Blender uses a default blend file as the starting point for all new projects. Materials could be added to this file so that all new projects would have ready access to these "preset" materials. However, accessing these is not exactly intuitive. These available materials would be much more obvious if the following changes were made to the material properties panel.

When the current material slot is empt a list of available material datablocks is shown in the space where the rest of the options normally are. These are the "presets".

When one of these "presets" is clicked, the material it represents is copied, renamed to <presetName>-<objectName>, moved to the active material slot, the previews hidden, and the rest of the options shown as normal.

However, it is still hard to define new presets and customize old ones. So, there needs to be a few buttons added, perhaps by way of an extension.

the "make this material a preset" button would add a material to the startup blend file. It should be located somewhere in the standard material options

the "remove this material from presets" button would remove a material from this blender file and from the startup blend file. It should be located in the presets list shown when the active material is not defined.

The final thought is that names are often not descriptive enough for materials, and having to re-render a whole list of potentially very complicated materials every time the list is pulled up would cause problems. So I believe that there ought to be a place in every material's datablock to store a thumbnail of its last preview render. That way materials could have a preview as well as a name without having to use excessive CPU or GPU resources. I will understand however if this has to be relegated to future blender versions or something if it breaks file compatiblity. I'm not sure exactly how the datablocks and file storage systems work, only that they are very closely linked.

Since blender uses the startup blend file to store all default configurations, I propose that there should be an extension made that would provide tools for storing, fetching, and deleting materials (and perhaps other datablocks) from the startup blend file. This should include tools in the spacebar menu like “make active material a preset” and possibly a button next to the add/remove material slots buttons for making it a preset.
The properties material page could be changed so that if the current material slot is empty, there is a pretty list of available material datablocks in the space where the rest of the options will be. When one is clicked, that material should be copied to the active slot, renamed to <presetName>-<objectName>, the previews hidden, and the rest of the options shown as normal.
The material datablock should have space for the last rendered material preview. That way the material could have an intelligent icon. The material preview render is already happening, so we just need to store it for later reference. This would also mean that it wouldn’t have to re-render it every time you opened the blend file, just whenever you change material settings