Pasar conjuntos de resultados múltiples a una vista desde un controlador en ASP.NET MVC?

Así que tengo un controlador configurado de la siguiente manera:

using NonStockSystem.Models;

namespace NonStockSystem.Controllers
{
    [Authorize(Users = "DOMAIN\\rburke")]
    public class AdminController : Controller
    {    
        private NonStockSystemDataContext db = new NonStockSystemDataContext();

        public ActionResult Index()
        {
            var enumProducts = from p in db.Products select p;
            ViewData["Title"] = "Administration";
            return View(enumProducts.ToList());
        }
    }
}

La vista de índice en el controlador de administración solo enumera los productos en el sistema y nos permite hacer clic en un producto para verlo / editarlo / eliminarlo. Muy simple Sin embargo, cada producto tiene un Id. De categoría que nos dice en qué categoría se encuentra almacenada en una tabla separada.

La vista actual (muy simplificada) es esta:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="NonStockSystem.Views.Home.Admin" %>
<%@ Import Namespace="NonStockSystem.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<%
foreach (Product p in (IEnumerable)ViewData.Model)
{ %>

    <%=p.Name.ToString() %> (<a href="/Admin/Edit/<%=p.ID.ToString() %>">Edit</a> - <a href="/Admin/Delete/<%=p.ID.ToString() %>">Delete</a>)<br />

<%
} %>   

</asp:Content>

Esto está bien en este momento, ya que solo hay 10 o 15 productos en el sistema mientras lo desarrollo y pruebo, sin embargo, una vez que lo implemente, habrá aprox. 300 productos en la base de datos. Estoy de acuerdo con mostrarlos todos en una página, sin embargo, me gustaría usar enlaces (a href = "# category") al igual que Wikipedia en la parte superior de la página, puedo tener la lista de categorías y cuando haces clic uno te lleva a la sección correspondiente de la página. Entonces, mi opinión en ese caso se verá así:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="NonStockSystem.Views.Home.Admin" %>
<%@ Import Namespace="NonStockSystem.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<ul>
<%
foreach (Category c in (IEnumerable)ViewData.Model)
{ %>
    <li><a href="#<%=c.Name.ToString() %>"><%=c.Name.ToString() %></a></li>
<%
} %>
</ul>

<hr />

<%
foreach (Category c in (IEnumerable)ViewData.Model)
{ %>
    <% // Display the category name above all products from that category %>
    <h2><a name="<%=c.Name.ToString() %>"><%=c.Name.ToString() %></a></h2>

    <% // Need to limit the following foreach to grab only products in this category
    foreach (Product p in (IEnumerable)ViewData.Model)
    { %>
        <%=p.Name.ToString() %> (<a href="/Admin/Edit/<%=p.ID.ToString() %>">Edit</a> - <a href="/Admin/Delete/<%=p.ID.ToString() %>">Delete</a>)<br />
    <%
    } %>
} %>

</asp:Content>

Primero, no estoy completamente seguro de que esta sea la forma "correcta" de hacer esto, así que definitivamente estoy abierto a sugerencias de una forma diferente de hacer las cosas, pero si este es el camino a seguir, entonces necesito saber cómo ( 1) pasar dos conjuntos de resultados a la vista (Productos y categorías) y (2) recorrer un subconjunto de los Productos en cada bucle foreach tomando solo los de la categoría apropiada?

¡Aclamaciones

Respuestas a la pregunta(1)

Su respuesta a la pregunta