How should I extend the possibilities of Tags and Layers as property-defining settings?

Tags and layers are useful, but sometimes one may need to put a GameObject on a few layers, to organize things into a nice property-heritage thing. My only idea of how to do this would be to create an empty GameObject, name it whatever I want (like "ignoreThis" and "ignoreThat") and then parent the other GameObjects to them, but I can't parent a GameObject to more than one GameObject, so unless there's some way of using code for this instead, I'd be grateful if someone could share their ideas. I know I can do the whole thing with code, in a very non-intuitive way, but maybe there's something about Unity I don't know that could help in this.

The fact that tags and layers are both 1-1 in Unity is really a bit of a drawback.

The easiest way to have multiple layers is to create layers that represent combinations of layers. Obviously this only works for low numbers of possible combinations.

You might try attaching a script to all your gameObjects and implementing the tag system yourself. That seems to be the most flexible, but you are stuck with implementing the system yourself.

If you are really adventurous, you could experiment with extending from GameObject - but who knows what this might break, or where you might get caught.

using UnityEngine;
using System.Collections;

public class MyGameObject : GameObject{
    public int layer = 0;

}