Nested switch to return configuration for combination of 3 database types and 4 domains
Just declare a (static readonly) dictionary:

var values = new Dictionary&lt;(DatabaseType, DomainType), DatabaseConfigType&gt;()
{
    { (DatabaseType.Type1, DomainType.Domain1), DatabaseConfigType.Type1Domain1 }
};


Filled with all possible combinations. Then your function will be reduced to:

DatabaseConfigType GetDatabaseConfiguration(DatabaseType database, DomainType domain)
    =&gt; values[(type, domain)];


You may want to use TryGetValue() to customize error message or to throw a different, more informative, exception. I'm using C# 7 named tuples but you can do it without them, it's just little bit more verbose because you need to declare your own Tuple because we need it to be a struct unless you use a custom comparer.



Edit: what if you need custom error messages (saying which part is unknown)? You need to nest dictionaries:

var values = new Dictionary&lt;DatabaseType, Dictionary&lt;DomainType, DatabaseConfigType&gt;&gt;()
{
    {
        DatabaseType.Type1, Dictionary&lt;DomainType, DatabaseConfigType&gt;
        {
            { DomainType.Domain1, DatabaseConfigType.Type1Domain1 }
        }
    }
};


In this case to get a value:

DatabaseConfigType GetDatabaseConfiguration(DatabaseType database, DomainType domain)
{
    if (values.TryGetValue(database, out var configTypes))
    {
        if (configTypes.TryGetValue(domain, out var configType))
            return configType;

        throw new ArgumentException($"Unknown domain {domain} for {database}");
    }

    throw new ArgumentException($"Unknown database {database}");
}




Which exception should be thrown? Assuming you can change this part of the code contract I feel ArgumentOutOfRangeException is not the appropriate one in this case (POLA?). Some combinations aren't allowed, an enum may have an invalid value (GetDatabaseConfiguration((DatabaseType)333, (DomainType)444)) or you may simply forgot to update this function after an update to the enum. 
In my opinion a generic ArgumentException may be enough (unless you want to differentiate the invalid combination case). A specific exception exists (InvalidEnumArgumentException) but I seldom saw it in real-world code (probably because it doesn't add much value over ArgumentException).



Assuming you changed names but not style then DOMAIN_1 isn't a good name because it doesn't follow common C# naming conventions: it's all uppercase and it uses underscore as separator, it should be Domain1.