Regularly updating table with huge amount of rows
It is possible for me to move the flag column to another table and do a complete rewrite of the score table. May this be more performant than updating only a selected amount of rows (~one third is updated each day)?


This is probably the way to go, if you can get away with batching the updates up to the daily level (that is, your "business logic" does not depend on seeing the updates closer to real time in order to get correct-enough answers).  Create the new table, then build the indexes, then in one transaction drop the old one and rename the new one into place.  This renaming into place can be a bit tricky if there are foreign keys, triggers, views, user defined functions which reference it, etc.  You don't even have to move the flag column to a separate table, if you make carrying the value of the flag over to the new table part of its creation process.


  Alternatively, is writing all changed rows to a separate, index-less table and updating the primary table in-database a preferable solution?


This is unlikely to solve the problem, unless you can drop the indexes while that update is in progress, or you have an off-peak window where you just don't care about performance.  Current versions of PostgreSQL do not have a provision for efficient bulk update of live btree indexes.  Your IO queue depth problem would be concentrated into a shorter period, would be more severe during that period.