This answer explains that you can have different infill within the same part. Firstly the implementation in Ultimaker Cura is described, second how you can do this in Slic3r.
I've used a feature in Ultimaker Cura that can be used to alter the infill density locally. What you need to do is load your model into Cura, then load other objects (models) at the size of the area/volume you want your infill differently and position those at the position you want a different infill. So basically, you use other models to intersect with your primary model to create intersections that can take a different infill percentage. This is extremely useful for lugs and brackets where you need some extra infill (e.g. extra stiffness for compression stresses) at the fastener holes. Note that this is an advanced feature which is not easy to use, but quite handy if you master it.
I could not find the video (on second thoughts, I think it was animated GIF) posted by Team Ultimaker, so I quote a section of one of their forum topics.
A short how-to: (italic font is not in the reference, but added to reflect recent version on Cura)
- Unselect "keep models apart" (now called: "Ensure models are kept apart") and "drop models to build plate" (now called: "Automatically drop models to the build plate") in Cura preferences
- Import a second object (for example a simple cube)
- Put Cura in "custom mode"
- Select the cube, and use the button "per object settings" on the left side
- Select "Infill Mesh" (now called: "Modify settings for infill of other models") and enable that setting
- The cube now turns transparent gray.
- Position the cube to overlap part of your model. It should overlap with the section that you want to change the infill for.
- Also with "per object settings" (now called: "Per model settings") select the option "infill density"
- Set it to the desired value. All is more or less illustrated in the screenshot below
- The picture shows a cube on the buildplate with infill 20%. Locally, with a rotated 2nd cube, the infill % is raised to 100%.
- What happens is that the volume where the cube intersects with your object is locally sliced with different infill.
Please find below another example of a simple bracket that has extra cylindrical objects loaded to create the intersections with the bracket at the fastener holes. In the example, the infill at the fastener holes is set to 99 %.
After slicing, you will see that the infill at the intersections is adjusted accordingly.
Note: I've tested this in Ultimaker Cura 3.4.1, and confirm it works. I sliced a part with the inserts for fasteners and it actually is not very difficult, it just requires a little more work. You will have to make some STL's of cylinders and position them correctly. If you make your own 3D models it will be a very easy task to add extra components while you design, positioning will be a lot more easy then (as they align with your model). Note that this will also work if you want a different infill percentage at the first X layers, just use a large cube (larger than the model) and position it correctly. Note that Cura already has an option called "Gradual Infill Steps" to adjust the density at the top layers.
This reference describes how to do this for Slic3r in detail.
The blog describes the use of a simple volume (the green volume loaded from an STL file). After loading:
Right-clicking on the main part brought up the object settings menu.
From there, clicking "Load Modifier" and selecting the previously
saved model adds it to the part as a modifier.
The green "+" was selected and "Fill Density" was added to modifier
list and set to 100%.
This shows that the functionality in Slic3r is very similar to the functionality in Ultimaker Cura.