Yes, the extra indexes will make the database larger. I don't have much experience with Jet databases this large, so I can't advise you about possibly hitting diminishing returns. However, I would think it's likely that, of the 50+ fields you have, you would only need to index a few to meet your query's needs. That probably wouldn't add a lot to the database size.
Let me add some more information: I was thinking in terms of selecting simple columns or scalar expressions on columns, with equality operators in the WHERE clause. If you're using the Like operator, you might wind up doing a table scan despite the indexes. Also, if you're using any subqueries, it gets a lot harder to figure out what you should include in your indexes.
On the other hand, if there is some particular restriction in your WHERE clause that you can predict will eliminate a large percentage of the rows you want, an effective speedup technique is to create a separate query that performs just that restriction, and then use that query in the FROM clause of your main query. For example, say your table has 30,000 products at 50 locations, and your query looks like this:
SELECT ProductName, CustID, OrderID, QtyShipped
FROM Products INNER JOIN Orders ON
Products.ProductID = Orders.ProductID
WHERE Location = 'Dallas' And ShipDate >= #05/31/02#
ORDER BY ProductName, CustID, OrderID
On average, selecting by location will eliminate 98% (49/50) of the rows in the Products table, which would be a big help. So in this case, you might create a query called DallasProducts:
SELECT * FROM Products WHERE Location = 'Dallas'
(Of course, you should have an index on Location for this.)
Then your main query would become:
SELECT ProductName, CustID, OrderID, QtyShipped
FROM DallasProducts INNER JOIN Orders ON
DallasProducts.ProductID = Orders.ProductID
WHERE ShipDate >= #05/31/02#
ORDER BY ProductName, CustID, OrderID
I think that, by doing this, you force Jet to perform the DallasProducts query first, which eliminates most of the data you would have to read from the Products table. What's left should be pretty quick to join with Orders.
Another idea: Compact your database, then for each query you need to speed up, open it, save it (without making any changes), and then switch it to Datasheet View. The compact operation updates the internal statistics that Jet uses to decide how to compile the query, and the save followed by execution of the query (to show the datasheet) recompiles the query to reflect the updated statistics. This is especially effective on a large table when the queries haven't been recompiled since the table was much smaller.
For some more ideas, check the Microsoft Knowledge Base for white papers on Jet query optimization. They can be very helpful. Rick Sprague