Nope, since if those 100 hotspots each have an image, that will still be the same number of drawImage calls which look like the main blocker.
As for the text, there is a way of showing it without having to rely on canvas, which is using an texture atlas. For that, you use an texture that has all the glyphs:

and sample uvs from the texture based on the text you want to write. It’s more work than using 2D context, but it can be faster.
EDIT: Also found this GPU text rendering with vector textures · Will Dobbie (wdobbie.com) which is an alternative technique for rendering text fast on the GPU. But I don’t think text is our main problem here, it’s images.