Spatial indexing doesn't affect display time. You filter your records by I'd just like regular django or straight SQL. The spatial index is only used for spatial interaction operations like intersections and unions. If you want to query by an area that is what the spatial index is for but if you want to limit which records are checked an ID field will work fine. Just when adding records you need to assign that ID correctly.
If your concern is speed of display the more important question is are you going to build tiles and send those or are you going to send geojson files. For editing the later is needed but the former is faster for complex shapes or large numbers of features.
The way a spatial index works is roughly as follows.
You have a spatial feature that is shaped like and X and you have a second set of features that is a cloud if points. You want to figure out which points intersect with the X. The points are first compared to the bounding box of the X (via the use of the spatial index) and if they overlap then the actual intersection algorithm I run to see if they really intersect.
In this case you can see that all the points within the bounding box of the X will have to go to the next step to see if they really intersect.
Now imagine that we use a 10x10 grid to cut the X into pieces. This time when we test to see which points intersect many operations can be avoided by the fact that the X is now comprised of many smaller pieces and thus most of the points won't intersect with its bounding boxes.
If you have a situations where you need to intersect 100,000's of features with a large feature with a shape dynamic like the big X on way to optimize spatial performance I to store a broken up copy of that feature and do you spatial operations against that.
I know this is not what you asked but I'm hoping by understanding how spatial indexes work this will help you to understand that it isn't the answer you seek.