Можно как-то так, хотя имхо не оптимально:
string[] sites = { "test.site.ru", "site.ru", "new.test.site.ru", "one.new.test.site.ru", "best.one.new.test.site.ru", "site2.ru", "www.site2.ru" };
string[] tmpSorted = sites.Select(el => el.Split('.')).OrderBy(el => el.Length).Select(el =>...