It’s OK (and the True CP will result) to use Milestones. However, there is no logical scheduling reason to link Milestones.
Let’s say you have a Milestone to show the completion of Engineering. As long as the tasks within Engineering are linked to the actual tasks they feed to (as well as the Milestone for Engineering Completion), the true CP will form. You cannot use Milestones alone for each sub-group and link them together to other Milestones and get a true CP. What you are saying in that case is that all engineering must finish, then all Purchasing/Delivery must finish, then all assembly, then all testing, etc. That is almost never the case. Usually, some Purchasing can begin before all Engineering tasks are complete and some Assemply tasks can start before all of the Purchasing/Delivery tasks are complete. The end date of the project would be much later than actual and the CP would be through just about every task in your project. Instead, the actual tasks with in the Milestone sub-groups must be linked across the Milestones. For example, some task in your Engineering group is probably CP and feeds to some specific task in Purchasing. That specific task in Purchasing feeds to another specific task in Assembly and so forth. But you do not want to tie the Milestones to each other, because of the reason stated earlier.
You might deem your major milestones so important that you have to know at all times if you are on track to deliver them. In this case you can use the Deadline feature to set the major milestone due date on the milestone. Warining, if you do this, you are setting a CP for each Milestone that you designate a Deadline for. Now it is very difficult to find the true CP for the entire project, especially if you have sevearl Major Milestones with Deadlines set. It’s like treating each Major Milestone as a sub-project.