Determine least number of columns required for unique (clustered) index
I don't know how useful this will prove to be as I've not tested it out thoroughly, but you should be able to utilize Statistics Density Vector values to see what columns (and column combinations) will provide a higher likelihood of unique values.  The script listed below basically pulls all the Density Vector values for all stats on a given table.  This is not complex as it looks for the lowest Density Vector with the lowest Average Record Length.  Whatever records appear first in this result set should be your best candidates for unique columns.

OF NOTE: This only evaluates statistics that exist, so you may need to create multi-column statistics to fill in any gaps as auto-generated stats are limited to single columns.  

Why is this better than the count approach? 

You can specify sample rates with statistics which should reduce analysis times on larger tables, and the table scan (and locking that will come with it) when running the various COUNT aggregations also won't occur when creating the stats against a busy system.

Here's the script:

SET NOCOUNT ON

-- provide table name you wish to analyze
DECLARE @tableName NVARCHAR(256) = 'dbo.TABLE__NAME'
      , @statsName NVARCHAR(128), @dSQL NVARCHAR(1024)

DECLARE @stats_densityVector TABLE
(
    StatName    NVARCHAR(1024),
    AllDensity  REAL,
    AvgLength   BIGINT,
    Columns     NVARCHAR(1024)
)

DECLARE statsHeader CURSOR
FOR
    SELECT  name AS stats_name
    FROM    sys.stats s
    WHERE   s.object_id = OBJECT_ID(@tableName)

OPEN statsHeader
FETCH NEXT FROM statsHeader
INTO    @statsName

WHILE @@FETCH_STATUS = 0
BEGIN

    SET @dSQL = 'DBCC SHOW_STATISTICS (''' + @tableName + ''', ' + @statsName + ') WITH DENSITY_VECTOR, NO_INFOMSGS'
    INSERT INTO @stats_densityVector (AllDensity, AvgLength, Columns)
    EXEC (@dSQL)

    UPDATE @stats_densityVector
    SET StatName = @statsName
    WHERE StatName IS NULL

    FETCH NEXT FROM statsHeader
    INTO    @statsName
END

CLOSE statsHeader
DEALLOCATE statsHeader

SET NOCOUNT OFF

SELECT  OBJECT_SCHEMA_NAME(s.object_id) + '.' + OBJECT_NAME(s.object_id) AS table_name
        , dv.*
        , sp.rows_sampled
        , sp.rows
        , (1.0 * sp.rows_sampled) / (1.0 * sp.rows) AS sample_pct
FROM sys.stats s 
        CROSS APPLY sys.dm_db_stats_properties (s.object_id, s.stats_id) sp
        INNER JOIN @stats_densityVector dv
            ON dv.StatName = s.name
WHERE s.object_id = OBJECT_ID(@tableName)
ORDER BY dv.AllDensity, dv.AvgLength


Here's a dbfiddle.uk example of how this would work on a contrived example.