Как отсортировать массив с добавлением разделителей групп?
Толи я не понимаю, толи это ответ:// сортируем
var sorted = $scope.dis.sort(function (a, b) {
  return a.name > b.name? 1 :  -1;
});
// собираем сам массив
var sortedWithGroups = sorted.reduce(function (res, a) {
  // добавляем дополнительно букву перед первым словом на новую букву
  // если это первое слово на эту букву
  if (res.lastGroup !== a.name[0]) {
    res.lastGroup = a.name[0];
    res.push({name: a.name[0], group: true});
  }
  // добавляем саму ссылку
  res.push(a);
  return res;
}, []);
В итоге в sortedWithGroups отсортированный массив с группировкой по буквам.
p.s. Разделил на переменные только ради комментариев. Все это можно собрать в несколько строк и вызывать reduce сразу после sort в одной конструкции.
Ссылки:
Array.prototype.sort: https://developer.mozilla.org/en-US/docs/Web/JavaS...
Array.prototype.reduce: https://developer.mozilla.org/en-US/docs/Web/JavaS...
Я использую lodash/underscore для таких зачач. _.sortBy(['a', 'b', 'c'], function(s){ 
    return s.charCodeAt() * -1;
});
А вообще в angularjs есть нативный сервис $filter. Он тоже это умеет делать. 
https://docs.angularjs.org/api/ng/filter/orderBy