I think the ideal case would be having both your @id middleware which seems an amazing idea to describe composite ids, and @unique to ensure uniqueness for certain fields and being able to filter by those, so something like this could be intuitive and powerful:
type Application @id(person, job) {
id: ID!
person: Person!
job: Job!
applicationCode: String! @Unique
...
}
And yes! I wish pre-hooks are a thing soon!