Otimizar consulta da estrutura da entidade

Estou tentando criar um clone de stackoverflow no meu tempo para aprender EF6 e MVC5, atualmente estou usando o OWin para autenticação.

Tudo funciona bem quando eu tenho 50-60 perguntas, eu useiGerador de dados Red Gate e tente aumentar até 1 milhão de perguntas com algumas milhares de linhas filho da tabela sem relação apenas para "estressar" o ORM um pouco. Aqui está como o linq se parece

var query = ctx.Questions
               .AsNoTracking()     //read-only performance boost.. http://visualstudiomagazine.com/articles/2010/06/24/five-tips-linq-to-sql.aspx
               .Include("Attachments")                                
               .Include("Location")
               .Include("CreatedBy") //IdentityUser
               .Include("Tags")
               .Include("Upvotes")
               .Include("Upvotes.CreatedBy")
               .Include("Downvotes")
               .Include("Downvotes.CreatedBy")
               .AsQueryable();

if (string.IsNullOrEmpty(sort)) //default
{
    query = query.OrderByDescending(x => x.CreatedDate);
}
else
{
    sort = sort.ToLower();
    if (sort == "latest")
    {
        query = query.OrderByDescending(x => x.CreatedDate);
    }
    else if (sort == "popular")
    {
        //most viewed
        query = query.OrderByDescending(x => x.ViewCount);
    }
}

var complaints = query.Skip(skipCount)
                      .Take(pageSize)
                      .ToList(); //makes an evaluation..

Escusado será dizer que estou recebendo tempos limite de SQL e depois de instalarMiniprofilere observe a instrução sql gerada, com algumas centenas de linhas monstruosas.

Sei que estou ingressando / incluindo muitas tabelas, mas quantos projetos na vida real, só precisamos ingressar em uma ou duas tabelas? Pode haver situações em que temos que fazer isso muitas junções com milhões de linhas, será que os procedimentos armazenados serão a única maneira?

Nesse caso, a própria EF seria adequada apenas para projetos de pequena escala?