Yo lo que haria seria tenerlos archivos en un lugar privado (no accesible desde internet) levantar el archivo desde mi aplicacion, obtener los byes (bye[]) y mandarlos directamente al cliente en el Response.
De esta forma al cliente se le abre una ventana si quiere abrir o guardar el archivo.
Código:
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=TuArchivo.pdf");
Response.AddHeader("Content-Length", bytes.Length.ToString());
Response.ContentType = mimeType;
Response.Buffer = true;
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
Donde bytes es el byte[] donde esta el archivo.