poniżej napisałem Ci kod, który rozkłada wyrazy na litery
with slowa as (
select 'arek' as slowo
union all select 'szczebrzeszyn'
), litery as (
select substring(slowo,1,1) znaki
,stuff(slowo,1,1,'') slowo
,slowo wyraz
, 1 as idw
from slowa
union all
select substring(slowo,1,1) znaki
,stuff(slowo,1,1,'') slowo
, wyraz
, idw+1 as idw
from litery
where len(slowo) > 0
)
select *
from litery
order by wyraz
wystarczy teraz że zamiast tabeli słowa użyjesz swojej contractors, a tabele litery połączysz joinem z Twoją tabelą chars