The question asks how to take advantage of r-tree in geopandas spatial joins, and another responder correctly points out that you should use 'within' instead of 'intersects'. However, you can also take advantage of an r-tree spatial index in geopandas while using intersects/intersection, as demonstrated in this geopandas r-tree tutorial:

So what happened when you switched the op from op="intersects" to op="within" is that for every polygon, the corresponding points are found through the rtree index, which in your case sped up the query.