• This uses a binary mask to select the unique sets where one of each character are present. It runs in about 14 seconds.

    declare @t varchar(10) = 'ABCDEFGH'

    ;with src(t,n,p) as (

    select substring(@t,1,1),1,power(2,0)

    union all

    select substring(@t,n+1,1),n+1,power(2,n)

    from src

    where n < len(@t)

    )

    select s1.t+s2.t+s3.t+s4.t+s5.t+s6.t+s7.t+s8.t

    from src s1, src s2, src s3, src s4, src s5, src s6, src s7, src s8

    where s1.p+s2.p+s3.p+s4.p+s5.p+s6.p+s7.p+s8.p=power(2,len(@t))-1