Descubrí una manera de hacer que funcione, de la que no estoy particularmente orgulloso, pero hace el trabajo. Si no puede estar en una transacción al adjuntar una base de datos, primero finalice la transacción.
db.setTransactionSuccessful();
db.endTransaction();
db.execSQL("ATTACH DATABASE ? AS names",new String[]{namesDb});
db.beginTransaction();