It's best to profile to help make the right choice as there can be a bit of nuance.
While we always trying to drive down job system overhead, there will always be some.
Jobs are copied so there is a cost there (Note IJobEntity are converted into to IJobChunks which use a JobWrapper which will increase the size of the job to a bit bigger than just your defined jobdata)
Job threads can be asleep. If this is the job to wake the worker thread then you'll pay a wake up cost that varies but can be ~10us.
However if your job has a dependency, then as long as scheduling of this job isn't a long-time after the dependency was scheduled, then the odds are workers are awake and will pick up the job very quickly. (alternatively if you have lots of jobs, you tend to keep workers awake longer so that helps avoid the wake up cost as well)
The main comparison point to look at is how long your job runs if run directly on the main thread (e.g. using the idiomatic foreach as mentioned above or you can call RunByRef() instead of Schedule (RunByRef will avoid the copy of the job data)) vs the creation of the job struct + Schedule call. If running single threaded is smaller than the schedule then the job is too small. You can measure this by using the profile marker API.
Another bit to keep in mind is if the number of entities will ever change. Jobs will keep the main thread with a fixed cost (scheduling the job) where as the main thread will get slower and slower if jobs are converted to run directly on the main thread