First, we should ask what purpose MSC type codes serve. After all modern papers can be indexed in full text and, even if paywalls make full text search impractical one can do a full text search on abstracts at mathscinet. It seems to me they offer two important features.
MSC codes let one track all papers in a given are even when no particular search terms would be sufficiently specific without leaving anything out. This allows paper archives to present their contents in a hierarchical manner or searches to be restricted to a particular subject.
MSC codes (at least in theory, I've never used them for this purpose) distinguish papers working with particular mathematical objects/approaches that can't easily be identified using keyword searches. For instance even if I restrict my attention to papers in computability a search for "admissible set" is likely to turn up to much (admissible, like good, is overused) and miss some instances that use other terminology.
The first usage calls for a basic hierarchical description of major areas of mathematical research. Each area should be well populated and each paper should fall into only one or at most a handful of areas. These areas should be developed enough that they won't disappear with changes in research focus.
The second usage calls for a plentiful list of canonical tags for particular objects, approaches or questions. Each paper might fall under arbitrarily many such tags, the more the better. As far as this use is concerned there is no real harm if research directions change and papers falling under some tag stop being published. Codes should be generously added for every conceivable object/approach/question constrained only by the requirement that every such concept have a canonical code (no codes that are synonyms). Search engines could then maintain a list of terms associated with each such code so one could do a search in computability theory for papers that mention both "model" (in the model theory sense) and admissible ordinal.
I submit that this naturally suggests two systems of codes. One hierarchical that roughly corresponds to the first two digits + letter, e.g., 03A, of MSC2010 and the other a much more numerous database of tags and their synonyms.