Is it possible to use a default partition for all reads?
If there are no situations where you need to query soft-deleted records, a simpler mechanism would be to have a table just for deleted records. You could then implement a scheduled job to copy all is_deleted = true records to the historical table and remove the originals from the source table.
Doing this would ensure the primary table contained all of the active records and no application queries would need to be updated.
If writes don’t happen very often, you could even look at using an AFTER UPDATE trigger to automatically copy (and maybe remove) soft-deleted records from the table as they’re invalidated.
This, I believe, would be much simpler to implement if going through all of the application SQL queries is untenable