With postgresql, create index does not block read, only write. You can also use the CONCURRENTLY parameter and writes/updates won't be blocked, but the index creation takes longer (the db has to wait until no transaction potentially involving the index has stopped).
Not sure what other strategies exist to reliably build an index.
http://www.postgresql.org/docs/current/static/sql-createinde...