An index on a field with two possible values is not as useful as you might think, particularly if you're continually changing the field that you're indexing. As an example, let's say you have a table with 100,000 rows of data, and initially 'status' is set to 0 for each row (after a delete cycle, and before an update cycle). At that point in time, using that index is equivalent to doing a sequential search of the table. If you update 1,000 rows, marking their status as 1, then your index will need to be updated (and possibly rebalanced) 1,000 times. Finally when you delete all the rows with status == 1, then you'll be able to take advantage of the index (you only look at 1% of the rows), but you'll need to update the index 1,000 times (in addition to deleting the rows).
IMO, you're better off selecting the 'bad' rows directly and deleting them immediately -- you eliminate the overhead of an index you're not using well, and the overhead of a second query.
Note: depending upon your database, deletes may be a very fast operation, or remarkably slow. Ultimately, deleting a row involves marking a row as unused, and then returning the space occupied by that row to the table so that new rows can be inserted. This is complicated by variable-length rows (as a result of variable-length datatypes), and by the internal implementation details. As an example, PostgresQL merely marks a row as deleted, and then uses a separate manually-invoked process (vacuum) to return the space used by the deleted rows to the table for use for new rows. I believe that PostegresQL still treats row updates as a delete, followed by an insert. MySQL and Oracle and SQL Server all have different methods of achieving the same end result, each with more complicated side-effects on system performance.
You'll need to study your documentation and any performance guides to decide what would be best for your system.