Changing delay duration in _delay_us() changes code size
The delay macro tries to provide as accurate delay it possibly can based on the requested time, so after a delay loop of some counts, it will adjust the number of NOP opcodes to get as close as possible.
If you don't want that, and don't care about the accuracy, simply use the delay loop macros that only include the loop count.
If you are serious about the code space saving, do you notice each time the delay macro is used, it takes about 50 bytes? Make a sigle subroutine to call a 500us delay, and then call the subroutine each time you want a 500us delay. Calling a subroutine much less bytes than inlining the delay macro.