the one to avoid is
iterate over a Recordset using the AddNew/Update methods
It is the slowest by far - perhaps a factor of 100 x slower.
the difference between openquery and runsql is that openquery can open a select query or an action query, whilst runsql can only run action sql (i.e. not reference a query object).
you also have the execute method for executing SQL action queries. primary difference to runsql is the error messages and outcome messages (i.e. '20 records appended'). execute has more control
with regards efficiency when designing your queries, ensure your tables are properly indexed and avoid subqueries as much as possible (and definitely avoid domain functions). On the volumes you are talking about they will kill performance.
Performance wise, I've never done any testing to see which is most efficient, but my guess would be for each method being pretty much the same for the same query - openquery perhaps having a very small advantage because the query will already have been compiled and the queryplan developed - but at the most a few seconds.
It really comes down to how you want to report progress