### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When requesting a  Complete operation at the end of a multi part upload, the parts have to be sorted in ascending order of part number.
AWS S3 issues an error if it is not the case. localstack does not generate such error (although, its log issues warnings)/

### Expected Behavior

Complete should generate an error

### How are you starting LocalStack?

With the `localstack` script

### Steps To Reproduce

localstack start

Buggy software extract (simplified)
```golang
	wg := errgroup.Group{}
	for i := 0; i < 3; i++ {
		wg.Go(func() error {
			rd, err := os.Open(source)
			if err != nil {
				return err
			}
			return u.Upload(rd, i, 10*_cMB)  // uploads and stores for part i
		})
	}
	err :=  wg.Wait()
if err != nil {
...
}
err = u.Complete()
// as using i inside the routines, all the four parts will have the same value 3
```

### Environment

```markdown
- OS:Ubuntu 20.04
- LocalStack: latest pro
```


### Anything else?

_No response_
is_canned_acl_bucket_valid,
    is_key_expired,
    is_valid_canonical_id,
    validate_kms_key_id,
    verify_checksum,
)
from localstack.services.s3.website_hosting import register_website_hosting_routes
from localstack.utils.aws import aws_stack
from localstack.utils.aws.arns import s3_bucket_name
from localstack.utils.collections import get_safe
from localstack.utils.patch import patch
from localstack.utils.strings import short_uid
LOG = logging.getLogger(__name__)
os.environ[
    "MOTO_S3_CUSTOM_ENDPOINTS"
] = "s3.localhost.localstack.cloud:4566,s3.localhost.localstack.cloud"
MOTO_CANONICAL_USER_ID = "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
S3_MAX_FILE_SIZE_BYTES = 512 * 1024
class MalformedXML(CommonServiceException):
    def __init__(self, message=None):
        if not message:
            message = "The XML you provided was not well-formed or did not validate against our published schema"
        super().__init__("MalformedXML", status_code=400, message=message)
class MalformedACLError(CommonServiceException):
    def __init__(self, message=None):
        super().__init__("MalformedACLError", status_code=400, message=message)
class InvalidRequest(CommonServiceException):
    def __init__(self, message=None):
        super().__init__("InvalidRequest", status_code=400, message=message)
class UnexpectedContent(CommonServiceException):