Indexed varchar column very slow (40M+ rows)
Do you really need to select every column?  If not, then don't.  It might be generating extra TOAST table lookups, or might be inhibiting index-only scans.

You are selecting 1.5 million rows.  Indexes are awesome, but they are not magical.  1.5 million is a lot, especially when scattered randomly throughout a giant (how big is it?) table.

You can almost certainly speed this up by clustering the table on the "index_events_on_type" index.  But this a resource intensive operation which will probably require a maintenance window to do, and it won't stay clustered upon future inserts/updates.  Alternatively, you could partition the table by "type".  This has more or less the same effect as clustering (in this context!) but it stays partitioned in the face of future actions.

What version of PostgreSQL are you using?  I would have expected you to get a parallel query here if it is recent version (not that it will necessarily be effective, but still I would have expected one).

Given that you are retrieving ~4% of the table, a seq scan might be more effective than an index scan.  You can do set enable_bitmapscan=off and see how that does.