Dictionary with ISet key as a collection of names
You can just use a single class with a generic Create method which has constraints for IEqualityComparer&lt;string&gt;:

internal class NameSetGeneric : HashSet&lt;string&gt;
{
    private NameSetGeneric(IEnumerable&lt;string&gt; keys, IEqualityComparer&lt;string&gt; keyComparer)
        : base(keys ?? throw new ArgumentNullException(nameof(keys)), keyComparer)
    {
    }

    public static NameSetGeneric Create&lt;T&gt;(T comparer, params string[] keys)
        where T : IEqualityComparer&lt;string&gt; =&gt; new NameSetGeneric(keys, comparer);
}


You can even go further and make the whole class generic, but that's only if you want to work with different data types.

Example usage:

var dic = new Dictionary&lt;NameSetGeneric, string&gt;(new SetComparer());
dic.Add(NameSetGeneric.Create(StringComparer.OrdinalIgnoreCase, "foo", "bar"), "fb");
dic.Add(NameSetGeneric.Create(StringComparer.OrdinalIgnoreCase, "qux"), "q");
dic[NameSetGeneric.Create(StringComparer.OrdinalIgnoreCase, "baz")] = "b";
dic[NameSetGeneric.Create(StringComparer.OrdinalIgnoreCase, "bar")].Dump(); //fb
dic.Add(NameSetGeneric.Create(StringComparer.OrdinalIgnoreCase, "foo"), "f"); // bam!