Entity framework paginación con método de extensión es lento?

Tengo algunos problemas con una consulta lenta en Entity Framework en C #. He creado un método de extensión llamado Página para manejar la paginación, pero cuando lo uso, la consulta se vuelve muy lenta. Si acabo de hacer .Skip (page.Value * pageSize.Value) .Take (pageSize.Value) en lugar de utilizar Page, la consulta es mucho más rápida. Supongo que hacerlo con la página obtiene todos los contactos antes de la paginación. ¿Hay alguna manera de evitar esto o estoy haciendo algo mal?

Consulta:

var contacts = db.Contacts
                        .Where(x => x.AccountID == accountID && x.Deleted == false)
                        .OrderByDescending(x => x.FirstName)
                        .ThenBy(x => x.LastName)
                        .ThenBy(x => x.CreatedDate)
                        .Page(page, pageSize);

return contacts.ToList();

Método de extensión:

    public static IEnumerable<T> Page<T>(this IEnumerable<T> elements, int? page, int? pageSize)
    {
        if (page.HasValue && pageSize.HasValue)
            return elements.Skip(page.Value * pageSize.Value).Take(pageSize.Value);
        else
            return elements;
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta